ScopeProperty
范围属性是可以在当前线程本地存储值的东西。它的 API 可用于设置/获取该值,还可以以堆栈方式对部分值进行修改。
换句话说,它是全局变量、scala 隐式变量、线程本地变量(ThreadLocal) 的替代品。
- To compare with global variable, It allow to run multiple thread running the same code independently 
- 与 scala 隐式变量相比,它与代码库的耦合较小 
- 与线程本地变量(ThreadLocal) 相比,它有一些 API 可以收集所有范围属性并稍后将它们恢复到相同状态 
object Xlen extends ScopeProperty[Int]
object ScopePropertyMiaou extends App {
  Xlen.set(1)
  println(Xlen.get) // 1
  Xlen(2) {
    println(Xlen.get) // 2
    Xlen(3) {
      println(Xlen.get) // 3
      Xlen.set(4)
      println(Xlen.get) // 4
    }
    println(Xlen.get) // 2
  }
}